1 package uba.db.sql.server;
2
3 import java.io.File;
4
5 import uba.db.Database;
6 import uba.db.impl.filesystem.FileSystemDatabase;
7 import uba.db.sql.interpreter.Interpreter;
8 import uba.db.sql.interpreter.QueryPlanner;
9 import uba.db.sql.interpreter.sentencevalidation.SentenceValidationException;
10 import uba.db.sql.language.Sentence;
11 import uba.db.sql.parser.SQLParser;
12 import uba.db.sql.parser.SQLParserException;
13
14 /***
15 * Ejecutor de consultas. Desde acá se consiguen los objetos que representan las
16 * consultas, se arma el plan de ejecución, y se devuelven los resultados al
17 * cliente.
18 *
19 * @version $Revision: 1.14 $
20 */
21 public class ServerProcessor {
22 private SQLParser parser;
23
24 private Interpreter interpreter;
25
26 private Database database;
27
28 private QueryPlanner planner;
29
30 private ServerDataConverter converter;
31
32 private QueryPlanner queryPlanner;
33
34 /***
35 * Constructor default. Inicializa las variables privadas.
36 *
37 * @param databaseDirectory
38 */
39 public ServerProcessor(File databaseDirectory) {
40 parser = new SQLParser();
41 database = database(databaseDirectory);
42 interpreter = new Interpreter(database);
43 queryPlanner = new QueryPlanner(database);
44 converter = new ServerDataConverter(queryPlanner);
45 }
46
47 /***
48 * Se buscan y construyen los resultados que implica la consulta. .
49 *
50 * @param s
51 * El string de la sentencia.
52 * @return La tabla de resultados a mostrar.
53 */
54 public String execute(String s) {
55 Sentence resultadoParseo;
56 try {
57 resultadoParseo = parser.parse(s);
58 interpreter.validateSentence(resultadoParseo);
59 queryPlanner.execute(resultadoParseo);
60 } catch (SQLParserException exInvalidSQL) {
61 resultadoParseo = null;
62 } catch (SentenceValidationException exValidationError) {
63 resultadoParseo = null;
64 }
65
66 if (resultadoParseo == null) {
67 System.out.println("Parseo Reportándose: No funciono!");
68 } else {
69 System.out.println("Parseo Reportándose: "
70 + resultadoParseo.toString());
71 }
72 return converter.stringFromCurrentRequest();
73 }
74
75 private Database database(File databaseDirectory) {
76 try {
77 Database db = new FileSystemDatabase(databaseDirectory);
78 return db;
79 } catch (Exception e) {
80 throw new RuntimeException(e);
81 }
82 }
83
84 }